function V=mutation(X,bestX,F,mutationStrategy)
% 差分进化算法中的变异
%
% INPUTS：
%   X               - 当前种群矩阵 (NP × D)，每一行是一个个体
%   bestX           - 当前种群中的最优个体（1 × D 向量）
%   F               - 缩放因子 (scaling factor)，通常取 [0.4, 1]
%   mutationStrategy- 变异策略编号：
%                      1 = DE/rand/1
%                      2 = DE/best/1
%                      3 = DE/rand-to-best/1
%                      4 = DE/best/2
%                      5 = DE/rand/2
%
% OUTPUTS：
%   V               - 变异后得到的候选个体矩阵 (NP × D)

[NP,D]=size(X);          % NP = 种群规模，D = 维度
V = zeros(NP, D);        % 初始化变异矩阵 V

for i=1:NP
    % 针对每个个体 i 生成一个变异向量
    switch mutationStrategy
        case 1
            % mutationStrategy=1: DE/rand/1
            % 公式：v = x_r1 + F * (x_r2 - x_r3)
            % 随机选择三个不同个体 r1,r2,r3
            r = randperm(NP, 3);
            V(i,:) = X(r(1),:) + F*(X(r(2),:) - X(r(3),:));
            
        case 2
            % mutationStrategy=2: DE/best/1
            % 公式：v = best + F * (x_r1 - x_r2)
            % 使用当前最优个体 bestX 作为基准
            r = randperm(NP, 2);
            V(i,:) = bestX + F*(X(r(1),:) - X(r(2),:));
            
        case 3
            % mutationStrategy=3: DE/rand-to-best/1
            % 公式：v = xi + F*(best - xi) + F*(x_r1 - x_r2)
            % 在个体 xi 向 best 方向搜索，并加上差分扰动
            r = randperm(NP, 2);
            V(i,:) = X(i,:) + F*(bestX - X(i,:)) + F*(X(r(1),:) - X(r(2),:));
            
        case 4
            % mutationStrategy=4: DE/best/2
            % 公式：v = best + F*(x_r1 - x_r2) + F*(x_r3 - x_r4)
            % 在最优个体的基础上叠加两组差分向量
            r = randperm(NP, 4);
            V(i,:) = bestX + F*(X(r(1),:) - X(r(2),:)) + F*(X(r(3),:) - X(r(4),:));
            
        case 5
            % mutationStrategy=5: DE/rand/2
            % 公式：v = x_r1 + F*(x_r2 - x_r3) + F*(x_r4 - x_r5)
            % 完全基于随机差分，没有依赖 best 个体
            r = randperm(NP, 5);
            V(i,:) = X(r(1),:) + F*(X(r(2),:) - X(r(3),:)) + F*(X(r(4),:) - X(r(5),:));
            
        otherwise
            % 错误处理：未定义的变异策略
            error('没有指定有效的变异策略，请重新设定mutationStrategy的值');
    end
end
end
